import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)
import java.awt.Font;  //
import java.awt.Color; 

/**
 * Write a description of class CatchWorld here.
 * 
 * @author (Karen Gonzalez) 
 * @version (29/05/14)
 */
public class CatchWorld extends World
{
    /**Variables de instancia*/
    private Plataforma plataforma;
    private Piña pina;
    private Llave key;
    private Leon leon;
    private Fresa fresa;
    private Jugador jugador;
    private Roca roca;
    private int nivel;
    private Gato gato;
    public int vidas;
    private Ladron ladron;
    private int tam = 3;
    private int t=0;
    private SimpleTimer tiempoReloj;
    private int randkey = Greenfoot.getRandomNumber(3);
    private Vida vida;
    private GreenfootSound musica;
    private time tiempo;
    private Martillo martillo;
    
    /**Constructor de la clase mundo*/
    public CatchWorld()
    {    
        super(800, 600, 1); 
        jugador = new Pocoyo();        
        vidas = 3;
        nivel = 1;
        portada();
        tiempo = new time();
    }
        
    /**Metodo que muestra la portada*/
    public void portada()
    {
        removeObjects(getObjects(Actor.class));
        setBackground("pocoyo_presentacion.png");
        Next sig = new Next(this);
        addObject (sig, 655, 494);
    }
        
    /**Metodo que agrega la ayuda*/
    public void ayuda()
    {
        removeObjects( getObjects(Actor.class) );
        setBackground("ayuda2.jpg");
        Regresar atras = new Regresar(this);
        addObject(atras,163, 523);
    }
        
    /**Metodo que agrega los creditos*/
    public void creditos()
    {
        removeObjects(getObjects(Actor.class));
        setBackground("creditos.png");
        Regresar atras = new Regresar(this);
        addObject(atras,151,379);
    }    
    
    /**Metodo que agrega los botones al menu*/
    public void menu()
    {
        removeObjects(getObjects(Actor.class));
        setBackground("menu.png");
        Play play = new Play(this);
        addObject(play, 524, 162);
        Ayuda ayuda = new Ayuda(this);
        addObject(ayuda, 633, 282);
        Creditos credi = new Creditos(this);
        addObject(credi, 499, 405);
        Records rec = new Records(this);
        addObject(rec,593,526);
    }
        
    /**Metodo para incrementar de nivel*/
    public void incrementaNivel()
    {
        nivel++;
    }
        
    /**Metodo que regresa las vidas*/
    public Vida getVida()
    {
        return vida;
    }
        
    /**Metodo que crea el nivel 1*/
    public void nivel1()
    {
        musica=new GreenfootSound("temapocoyo.mp3");
        musica.playLoop();
        removeObjects(getObjects(Actor.class));         
        setBackground("fondo_original.jpg");    
        addObject(tiempo, 738,27);
        addObject(jugador, 200, 572);
        Letrero let=new Letrero  ("Level 1");
        addObject(let, 70 ,22);  
        addObject(new Plataforma(), 113 , 117);
        addObject(new Plataforma(), 153 , 117);
        addObject(new Plataforma(), 193 , 117);
        addObject(new Plataforma(), 283 , 255);
        addObject(new Plataforma(), 323 , 255);          
        addObject(new Plataforma(), 523 , 255);         
        addObject(new Plataforma(), 739 , 257);
        addObject(new Plataforma(), 61 , 254);
        addObject(new Plataforma(), 142, 362);
        addObject(new Plataforma(), 181, 362);
        addObject(new Plataforma(), 388, 389);
        addObject(new Plataforma(), 427, 389);
        addObject(new Plataforma(), 467, 389);
        addObject(new Plataforma(), 640, 384);
        addObject(new Plataforma(), 680, 384);
        addObject(new Plataforma(), 47, 495);
        addObject(new Plataforma(), 87, 495);
        addObject(new Plataforma(), 535, 487);
        addObject(new Plataforma(), 575, 487);
        addObject(new Plataforma(), 232, 117);
        addObject(new Plataforma(), 272, 117);
        addObject(new Plataforma(), 312, 117);
        addObject(new Plataforma(), 352, 117);
        addObject(new Plataforma(), 391, 117);
        addObject(new Plataforma(), 431 , 117);
        addObject(new Plataforma(), 471 , 117);
        addObject(new Plataforma(), 511 , 117);
        addObject(new Plataforma(), 551 , 117);
        addObject(new Plataforma(), 591 , 117);
        addObject(new Plataforma(), 630 , 117);               
        
        if(randkey == 0)
        {
         addObject(new Llave(), 739 , 200);
        }
        else if(randkey == 1)
        {
        addObject(new Llave(), 169 , 314);
        }
        else if(randkey == 2)
        {
         addObject(new Llave(), 469 , 336);
        }
        else if(randkey == 3)
        {
        addObject(new Llave(), 465 , 68);
        }        
        
        addObject(new Fresa(), 739 , 200);
        addObject(new Fresa(), 169 , 314);
        addObject(new Fresa(), 469 , 336);
        addObject(new Fresa(), 465 , 68);                 
        addObject(new Gato(), 109,66);     
    }
        
    /**Metodo que crea el nivel 2*/
    public void nivel2()
    {
        int nivel =2;      
        removeObjects(getObjects(Actor.class));         
        setBackground("nivel2.jpg");
        Greenfoot.delay(200);
        setBackground("paisaje2.jpg");        
        addObject(jugador, 342, 573);
        addObject(tiempo, 738,27);        
        Letrero let=new Letrero  ("Level 2");
        addObject(let, 70 ,22);  
        addObject(new Ladron(), 610, 561);     
        if(randkey == 0)
        {
         addObject(new Llave(), 30,368);
        }
        else if(randkey == 1)
        {
        addObject(new Llave(), 288,98);
        }
        else if(randkey == 2)
        {  
             addObject(new Llave(), 574,136);   
        }
        else if(randkey == 3)
        {
             addObject(new Llave(), 730,466);  
        }        
        addObject(new Uva(), 30,368);
        addObject(new Uva(), 288,98);
        addObject(new Uva(), 574,136);         
        addObject(new Uva(), 730,466); 
        addObject(new Plataforma(), 21, 146);        
        addObject(new Plataforma(), 684, 514);
        addObject(new Plataforma(), 289, 415);
        addObject(new Plataforma(), 61, 146);
        addObject(new Plataforma(), 253, 148);
        addObject(new Plataforma(), 292, 148);
        addObject(new Plataforma(), 124, 280);
        addObject(new Plataforma(), 163, 280);//
        addObject(new Plataforma(), 203, 280);
        addObject(new Plataforma(), 20, 415);
        addObject(new Plataforma(), 60, 415);
        addObject(new Plataforma(), 61, 146);
        addObject(new Plataforma(), 100, 415);
        addObject(new Plataforma(), 193, 511);
        addObject(new Plataforma(), 232, 511);
        addObject(new Plataforma(), 411, 286);
        addObject(new Plataforma(), 567, 181);
        addObject(new Plataforma(), 607, 181);
        addObject(new Plataforma(), 515, 423);
        addObject(new Plataforma(), 555, 423);
        addObject(new Plataforma(), 594, 423);
        addObject(new Plataforma(), 371, 286);
        addObject(new Plataforma(), 779, 314);
        addObject(new Plataforma(), 739, 314);
        addObject(new Plataforma(), 451, 286);
        addObject(new Gato(), 29, 95);
    }
    
    /**Metodo que crea el nivel 3*/
    public void nivel3()
    {
        int nivel = 3;
        removeObjects(getObjects(Actor.class));        
        setBackground("nivel3.png");
        Greenfoot.delay(200);
        setBackground("paisaje3.jpg"); 
        addObject(jugador, 342, 573);
        addObject(tiempo, 738,27);           
        Letrero let=new Letrero  ("Level 3");
        addObject(let, 70 ,22);          
        addObject(new Leon(), 492, 40);
        addObject(new Plataforma(), 182, 499);
        addObject(new Plataforma(), 222, 499);
        addObject(new Plataforma(), 515, 502);
        addObject(new Plataforma(), 555, 502);         
        addObject(new Plataforma(), 46, 385); 
        addObject(new Plataforma(), 86, 385);
        addObject(new Plataforma(), 125, 385);   
        addObject(new Plataforma(), 165, 385);          
        addObject(new Plataforma(), 302, 384); 
        addObject(new Plataforma(), 641, 384);
        addObject(new Plataforma(), 680, 384);   
        addObject(new Plataforma(), 720, 384);                  
        addObject(new Plataforma(), 228, 97);                  
        addObject(new Plataforma(), 267, 97);                  
        addObject(new Plataforma(), 307, 97);      
        addObject(new Plataforma(), 347, 97);    
        addObject(new Plataforma(), 387, 97);                  
        addObject(new Plataforma(), 427, 97);                  
        addObject(new Plataforma(), 467, 97);    
        addObject(new Plataforma(), 506, 97);    
        addObject(new Plataforma(), 91, 179);   
        addObject(new Plataforma(), 131, 179);        
        addObject(new Plataforma(), 170, 179);                  
        addObject(new Plataforma(), 226, 267);   
        addObject(new Plataforma(), 265, 267);        
        addObject(new Plataforma(), 305, 267);                  
        addObject(new Plataforma(), 463, 284);   
        addObject(new Plataforma(), 503, 284);        
        addObject(new Plataforma(), 543, 284);         
        addObject(new Plataforma(), 600, 194);   
        addObject(new Plataforma(), 640, 194);        
        addObject(new Plataforma(), 679, 194);                         
        addObject(new Ladron(), 35, 562);     
        if(randkey == 0)
        {
         addObject(new Llave(), 235, 43);
        }
        else if(randkey == 1)
        {
        addObject(new Llave(), 89, 336);
        }
        else if(randkey == 2)
        {  
             addObject(new Llave(), 539, 228);   
        }
        else if(randkey == 3)
        {
             addObject(new Llave(), 682, 333);  
        }        
        addObject(new Piña(), 235, 43);
        addObject(new Piña(), 89, 336);
        addObject(new Piña(), 539, 228);        
        addObject(new Piña(),682, 333);            
        musicStop();
    }    
        
    /**Metodo que despliega una imagen, que indica que perdio*/
    public void pierde()
    {
        tiempo.start();
        musicStop();        
        tiempo.start();
        removeObjects(getObjects(Actor.class));
        setBackground("perdio.jpg");      
        musicStop();
    }
    
    /**Metodo para desplegar una imagen, que indica que gano*/
    public void Gana()
    {        
        tiempo.start();
        musicStop();
        tiempo.start();
        removeObjects(getObjects(Actor.class));
        setBackground("ganador.jpg"); 
    }
        
    /**Metodo para reiniciar el juego*/
    public void reinciaJuego()
    {
        nivel1();
    }            
        
    /**Metodo que regresa la fresa*/
    public Fresa getFresa()
    {
        return fresa;
    }
       
    /**Metodo que regresa la pina*/
    public Piña getPina()
    {
        return pina;
    }
            
    /**Metodo que regresa el ladron*/
    public Ladron getLadron()
    {
        return ladron;
    }
        
    /**Metodo que regresa el gato*/
    public Gato getGato()
    {
        return gato;
    }
        
    /**Metodo que regresa la plataforma*/
    public Plataforma getPlataforma()
    {
        return plataforma;
    }
        
    /**Metodo que regresa la roca*/
    public Roca getRoca()
    {
        return roca;
    }
        
    /**Metodo que regresa el jugador*/
          public Jugador getJugador()
    {
        return jugador;
    }    
    
    /**Metodo que regresa el leon*/
    public Leon getLeon()
    {
        return leon;
    }
    
    /**Metodo que regresa el martillo*/
    public Martillo getMartillo()
    {
        return martillo;
    }
    
    /**Meetodo para tiempo*/
    public SimpleTimer getTime()
    {
        return tiempoReloj;
    }
    
    /**Metodo para mostrar los records*/
        public void records2()
    {
        removeObjects( getObjects(Actor.class) );
        setBackground("record2.jpg");
        ScoreBoard board=new ScoreBoard(500,500);
        addObject(board,getWidth()/2,getHeight()/2);
        Regresar atras = new Regresar(this);
        addObject(atras,100,400);
        this.records();
    }        
        
    /**Metodo para records*/
        public void records()
    {
        removeObjects( getObjects(Actor.class) );
        //this.setBackground("RECORDSfondo.png");
        java.util.List records=UserInfo.getTop(5);
        // Record usuario;
        UserInfo info=UserInfo.getMyInfo();
        int y=50;
        Letrero nombre=new Letrero(info.getUserName());
        String cad=""+info.getScore();

        Letrero nivel=new Letrero(cad);
        Regresar atras = new Regresar(this);
        addObject(atras,100,150);
        Letrero let=new Letrero  ("RECORDS");
        addObject(let,350,30);    

        if(records!=null)
        {
            for(int i=0; i<records.size(); i++)
            {
                info=(UserInfo)records.get(i);
                addObject(nombre,110+(nombre.getImage().getWidth()/2),y);
                addObject(nivel,480+(nivel.getImage().getWidth()/2),y);
                y+=50;
            }
        }
        else
        {
            Letrero letrero;
            letrero=new Letrero("RECORDS   HO");
            this.addObject(letrero,300,50);
        }
    }
    
    /**Metodo para detener la musica*/
    public void musicStop()
    {
        musica.stop();
    }
}
